#include <cstdio>

using namespace std;
#define DEBUG
using ll=long long;

template <typename T>
inline void read(T &x)
{
    x = 0;
    bool f = 1;
    char c = getchar();
    for (; c < '0' || c > '9'; c = getchar())
        if (c == '-')
            f = -f;
    for (; c >= '0' && c <= '9'; c = getchar())
        x = (x<<3) + (x<<1) + c - '0';
    x *= f;
}
template <typename T, typename... Args>
void read(T &x, Args &...y)
{
    read(x);
    read(y...);
}

const int N=5e6+10;
int n, arr[N];

void solve()
{
    read(n);
    for(int i=1; i<=n; i++)
        read(arr[i]);
    
    ll ans=0;
    for(int i=1; i<n; i++) //枚举可以一次完成的枚举点，如果两次完成不了，那么三次一定也不行
    {
        if(arr[i]<arr[i+1]) continue; //找到严格上升子区间的末尾
        int l=i, r=i+1; //严格上升子区间最后一个元素  子区间的下一个元素
        while(r+1<=n && arr[r]<=arr[r+1] && arr[r+1]<arr[l]) r++;
        ans += r-i;
        while(l>=2) //l向左扩展
        {
            l--;
            if(arr[l]>arr[l+1]) break; //非严格上升
            while(r>=i+1 && arr[r]>=arr[l]) r--; //保证子区间条件
            ans+=r-i;
            if(r==i) break;
        }
    }
    printf("%lld\n", ans);
}

signed main()
{
    #ifdef DEBUG
        freopen("../in.txt", "r", stdin);
        freopen("../out.txt", "w", stdout);
    #endif

    int T; scanf("%d", &T);
    while(T--)
    {
        solve();
    }
    return 0;
}